package com.neusoft.carsale.util;

import java.security.MessageDigest;

public class PasswordEncoder {
	private final static String[] HEX_DIGITS= {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; 
	private final static String MD5="MD5";
	private final static String SHA="SHA";
	private Object salt;
	private String algorithm;
	public PasswordEncoder(Object salt) {
		this(salt,MD5);
	}
	public PasswordEncoder(Object salt, String algorithm) {
		this.salt = salt;
		this.algorithm = algorithm;
	}
	public String encode(String rawPass) {
		String result = null;
		try {
			MessageDigest md = MessageDigest.getInstance(algorithm);
			// 加密后的字符串
			result = byteArrayToHexString(md.digest(mergePasswordAndSalt(rawPass).getBytes("utf-8")));
		} catch (Exception ex) {
		}
		return result;
	}
	public boolean matches(String encPass,String rawPass) {
		String pass1=""+encPass;
		String pass2=encode(rawPass);
		return pass1.equals(pass2);
	}
	public String mergePasswordAndSalt(String password) {
		if(password==null) {
			password="";
		}
		if((salt==null)||"".equals(salt)) {
			return password;
		}else {
			return password+"{"+salt.toString()+"}";
		}
	}
	private String byteArrayToHexString(byte[] b) {
		StringBuffer resultSb=new StringBuffer();
		for(int i=0;i<b.length;i++) {
			resultSb.append(byteToHexString(b[i]));
			}
		return resultSb.toString();
	}
	private static String byteToHexString(byte b) {
		int n=b;
		if(n<0) {
			n=256+n;
		}
		int d1=n/16;
		int d2=n%16;
		return HEX_DIGITS[d1]+HEX_DIGITS[d2];
	}
	public static void main(String[] args) {
		
	}
}
